function fetch_request(url, data, cb) {
    fetch(url, {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify(data)
    })
        .then(function(response) {
            if (!response.ok) {
                throw new Error('HTTP error! status: ' + response.status);
            }

            var reader = response.body.getReader();
            var decoder = new TextDecoder();
            var buffer = '';

            // 存储当前正在处理的消息
            var currentMessage = {
                event: null,
                data: []
            };

            function readStream() {
                reader.read().then(function(result) {
                    var done = result.done;
                    var value = result.value;

                    if (done) {
                        console.log('流读取完成');
                        // 处理可能剩余的不完整消息
                        if (currentMessage.event) {
                            processMessage(currentMessage);
                        }
                        return;
                    }

                    // 解码并添加到缓冲区
                    var chunk = decoder.decode(value, {stream: true});
                    buffer += chunk;

                    // 处理所有完整的行（以\n分隔）
                    var newlineIndex;
                    while ((newlineIndex = buffer.indexOf('\n')) !== -1) {
                        var line = buffer.substring(0, newlineIndex).trim();
                        buffer = buffer.substring(newlineIndex + 1);

                        // 空行表示消息结束
                        if (line === '') {
                            if (currentMessage.event) {
                                processMessage(currentMessage);
                                // 重置当前消息
                                currentMessage = {event: null, data: []};
                            }
                            continue;
                        }

                        // 解析行内容
                        var colonIndex = line.indexOf(':');
                        if (colonIndex === -1) continue;

                        var field = line.substring(0, colonIndex).trim();
                        var value = line.substring(colonIndex + 1).trimStart();

                        // 处理不同字段
                        switch (field) {
                            case 'event':
                                currentMessage.event = value;
                                break;
                            case 'data':
                                currentMessage.data.push(value);
                                break;
                            case 'id':
                            case 'retry':
                                // 可选字段，根据需要处理
                                currentMessage[field] = value;
                                break;
                        }
                    }

                    readStream();
                }).catch(function(error) {
                    console.error('读取流失败:', error);
                });
            }

            // 处理完整的消息
            function processMessage(message) {
                try {
                    // 合并所有data行
                    var dataString = message.data.join('\n');
                    var data = JSON.parse(dataString);
                    // console.log('收到 ' + message.event + ' 事件:', data);

                    // 这里可以添加你的业务逻辑
                    if (message.event === 'message') {
                        console.log('处理消息:', data);
                        cb(data);
                    }
                } catch (error) {
                    console.error('解析消息失败:', error);
                }
            }

            readStream();
        })
        .catch(function(error) {
            console.error('请求失败:', error);
        });
}